#include "../include/btform.h"
#include "ui_btform.h"

btForm::btForm(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::btForm)
{
    ui->setupUi(this);

    ui->lineBox->hide();
    // 设置line1Animal的动画，ui->line1为动画对象，3为动画的帧数，1500为动画的时间
    setupLineAnimation(line1Animal, ui->line1, 3, 1500);
    // 设置line2Animal的动画，ui->line2为动画对象，9为动画的帧数，1600为动画的时间
    setupLineAnimation(line2Animal, ui->line2, 9, 1600);
    // 设置line3Animal的动画，ui->line3为动画对象，15为动画的帧数，1700为动画的时间
    setupLineAnimation(line3Animal, ui->line3, 15, 1700);
    // 设置line4Animal的动画，ui->line4为动画对象，21为动画的帧数，1800为动画的时间
    setupLineAnimation(line4Animal, ui->line4, 21, 1800);
}

/**
 * @brief 设置按钮的图标、文本和页面ID
 * @param btIcon 按钮图标的路径字符串
 * @param btText 按钮显示的文本字符串
 * @param pageId 按钮对应的页面ID
 * @details 该函数用于初始化或更新按钮的显示内容，包括：
 *          1. 设置按钮图标，通过QPixmap加载图标路径并显示在btIcon标签上
 *          2. 设置按钮文本，显示在btText标签上
 *          3. 保存按钮对应的页面ID，用于页面切换时的标识
 * @note 此函数通常在程序初始化时调用，用于设置导航按钮的初始状态
 */
void btForm::setIconAndText(const QString &btIcon, const QString &btText, int pageId)
{
    //  qDebug() << btIcon;
    // 设置按钮图标
    ui->btIcon->setPixmap(QPixmap(btIcon));
    // 设置按钮文本
    ui->btText->setText(btText);
    // 保存页面ID
    this->_pageId = pageId;
}

/**
 * @brief 获取按钮对应的页面ID
 * @return int 返回按钮关联的页面ID
 * @details 该函数返回当前按钮对象所关联的页面标识符，
 *          用于在按钮点击时确定需要切换到哪个页面。
 * @note 此函数是const成员函数，不会修改对象状态
 */
int btForm::getPageId() const
{
    return _pageId;
}

/**
 * @brief 清除按钮背景样式
 * @details 该函数将按钮的背景样式重置为默认状态，
 *          设置btStyle的样式表为仅包含左右内边距的样式，
 *          使按钮背景变为透明，文字变为默认颜色。
 * @note 此函数用于取消按钮的选中状态视觉效果
 */
void btForm::backGroundClear()
{
    // 鼠标点击之后，背景变为透明，文字变为黑色
    // 在构造函数或初始化时设置
    ui->btStyle->setStyleSheet("#btStyle{ padding-left: 10px; padding-right: 10px; }");
}

/**
 * @brief 设置线条动画
 * @param animation 动画对象指针
 * @param line 需要应用动画的线条控件
 * @param xPosition 线条的x坐标位置
 * @param duration 动画持续时间（毫秒）
 * @details 该函数创建并配置一个属性动画，用于控制线条控件的几何属性变化。
 *          动画包括三个关键帧：
 *          1. 起始状态：线条位于指定位置，高度为0
 *          2. 中间状态：线条向上展开至完整高度
 *          3. 结束状态：线条恢复到高度为0
 *          动画会无限循环播放
 * @note 此函数会创建新的QPropertyAnimation对象并启动动画
 */
void btForm::setupLineAnimation(QPropertyAnimation *animation, QWidget *line, int xPosition, int duration)
{
    animation = new QPropertyAnimation(line, "geometry", this);
    animation->setDuration(duration);
    animation->setKeyValueAt(0, QRect(xPosition, 15, 3, 0));
    animation->setKeyValueAt(0.5, QRect(xPosition, 0, 3, 15));
    animation->setKeyValueAt(1, QRect(xPosition, 15, 3, 0));
    animation->setLoopCount(-1);
    animation->start();
}

/**
 * @brief 显示或隐藏按钮动画效果
 * @param is_show 布尔值，true表示显示动画，false表示隐藏动画
 * @details 该函数控制按钮相关动画效果的显示状态，
 *          通过显示或隐藏lineBox控件来实现动画效果的开启或关闭。
 * @note 此函数是const成员函数，不会修改对象状态
 */
void btForm::showAnimal(bool is_show) const
{
    if (is_show)
        ui->lineBox->show();
    else
        ui->lineBox->hide();
}

/**
 * @brief 处理鼠标按下事件
 * @param event 鼠标事件对象
 * @details 该函数在用户按下鼠标时被调用，执行以下操作：
 *          1. 设置按钮样式为选中状态（背景红色，文字白色，圆角边框）
 *          2. 发出btClick信号，携带当前按钮的页面ID
 * @note 此函数重写了父类QWidget的mousePressEvent虚函数
 */
void btForm::mousePressEvent(QMouseEvent *event)
{
    // 告诉编译器不要触发警告
    (void) event;
    // 鼠标点击之后，背景变为绿色，文字变为白色
    ui->btStyle->setStyleSheet(R"(#btStyle{
                                     background-color:#FC3D49;
                                     color:#F6F6F6;
                                     border-radius: 10px;
                                     border: none; })");
    emit btClick(this->_pageId); // 发送鼠标点击信号
}


btForm::~btForm()
{
    delete ui;
}